import pandas as pd
import shutil
from pathlib import Path


def copy_files_by_name(excel_path, source_root, dst_dir,sheet_name=0):
    """
    根据Excel中的文件名从源目录查找并复制到目标文件夹
    :param excel_path: Excel文件路径
    :param source_root: 源文件搜索根目录
    :param sheet_name: 工作表名或索引
    """
    try:
        df = pd.read_excel(excel_path, sheet_name=sheet_name)

        # 检查必要列是否存在
        if 'file_name' not in df.columns :
            raise ValueError("Excel中必须包含'file_name'")

        for _, row in df.iterrows():
            filename = str(row['file_name'])+'.jpg'

            # 在源目录中递归搜索文件
            found_files = list(Path(source_root).rglob(filename))

            if not found_files:
                print(f"警告: 未找到文件 - {filename}")
                continue

            # 复制所有匹配文件
            for src_path in found_files:
                shutil.copy2(src_path, dst_dir)
                print(f"已复制: {src_path} -> {dst_dir}")

    except Exception as e:
        print(f"发生错误: {str(e)}")


if __name__ == "__main__":
    # 示例用法
    excel_path = "D:/02_item/09_毕业工作/2025秋（2025秋毕业审核截止日期是10月9日）/interpic20250906.xlsx"  # 包含file_name和target_folder列的Excel
    source_directory = "D:/02_item/09_毕业工作/2025秋（2025秋毕业审核截止日期是10月9日）/pic"  # 源文件搜索根目录
    dst_dir = "D:/02_item/09_毕业工作/2025秋（2025秋毕业审核截止日期是10月9日）/pic/本科"
    copy_files_by_name(excel_path, source_directory,dst_dir,"本科")
